﻿using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using DAO;

namespace WebApplication.Models
{
    public class ServerModel
    {
        [Required]
        [Display(Name="Имя сервера")]
        public string Name { get; set; }

        [Required]
        [Display(Name = "Тип сервера")]
        public string ServerType { get; set; }

        [Required]
        [Display(Name="Адрес удаленного хоста")]
        public string RemoteHostName { get; set; }

        [Range(0, int.MaxValue, ErrorMessage="Введите корректное значение для порта")]
        //[EnumDataType(, ErrorMessage = "Введите корректное значение для порта")]
        [Display(Name="Номер порта")]
        public int RemoteHostPort { get; set; }

        [Required]
        [Display(Name="Имя пользователя")]
        public string Login { get; set; }

        [Required]
        [Display(Name="Пароль")]
        [DataType(System.ComponentModel.DataAnnotations.DataType.Password)]
        public string Password { get; set; }

        [Display(Name="Комментарий")]
        public string Description { get; set; }

        public Server ToEfEntity()
        {
            int serverType = 0;
            if (!int.TryParse(ServerType, out serverType))
            {
                throw new InvalidOperationException("Ошибка преобразования типа данных ServerType.");
            }
            List<DeployObject> deployObjects = new List<DeployObject>();
            if (ServerObjects != null && ServerObjects.Count > 0)
            {
                ServerObjects.ToList().ForEach(item =>
                    {
                        deployObjects.Add(item.ToEfEntity());
                    });
            }

            return new Server
            {
                Name = this.Name,
                IdType = serverType,
                RemoteHostName = RemoteHostName,
                RemoteHostPort = RemoteHostPort,
                IsDelete = 0,
                Description = Description,
                DeployObjects = deployObjects,
                ServerLogin = Login,
                ServerPassword = Password
            };
        }

        public IList<ServerObjectModel> ServerObjects { get; set; }
    }
}